package org.opens.javaskill.jackson.serialize;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.junit.Test;

import java.io.IOException;
import java.text.DecimalFormat;

/**
 * 是jackson处理Double类型的数据为json时, 控制double类型的数据的格式.
 */
public class DoubleSerialize extends JsonSerializer<Double> {

    private DecimalFormat df = new DecimalFormat("#0.00");

    @Override
    public void serialize(Double value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeString(this.df.format(value));
    }

    public static class OtherNumberFormat {

        @Test
        public void test1() {
            double pi = 123.1512134567;
            // 取整数部分
            String s1 = new DecimalFormat("0").format(pi);
            System.out.println("取整数：" + s1);//123

            // 取小数点后1位,四舍五入
            String s2 = new DecimalFormat("0.0").format(pi);
            System.out.println(s2);//123.2

            // 取小数点后3位，不足部分取0
            String s3 = new DecimalFormat("0.000").format(pi);
            System.out.println(s3);//123.150

            // 百分比
            String s4 = new DecimalFormat("0.0%").format(pi);
            System.out.println(s4);// 12315.0%, 注意的是自动乘了100并添加了%.

            // 科学计数法
            String s5 = new DecimalFormat("0.00E0").format(pi);
            System.out.println(s5);//1.23E2

            double d = 1234567;
            // 每三位以逗号分开
            String s6 = new DecimalFormat(",000").format(d);
            System.out.println(s6);//1,234,567

            //小数点后3位，如果是0则不显示
            String s7 = new DecimalFormat("#.###").format(123.300);
            System.out.println(s7);//123.3
        }

    }

}
